package cn.getech.data.development.model.vo;

import cn.getech.data.development.dto.JobNodeLayConfigDto;
import cn.getech.data.development.entity.JobNodeConfJdbcParam;
import cn.getech.data.development.entity.JobNodeInfo;
import cn.getech.data.development.entity.SapConnectField;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 任务配置的枚举
 *
     * @author HQZ
 */
@Data
public class JobNodeConfigVo implements Serializable {

    private Integer jobNodeId;

    //调度设置_类型  0不重复 1重复
    private Integer schedule_type;

    private Integer scheduleOrInterval;

    private String expression;

    /***
     * 数据接入和推送模块
     */


    //输入设置_数据源连接类型
    private Integer input_connect_type;
    //输入设置_数据源连接
    private Integer input_connect_id;

    //输入设置_数据源连接名称
    private String input_connect_name;
    //输入设置_输入方式
    private String input_input_type;
    //输入设置_输入内容
    private String input_input_content;

    //输入设置_数据库名称
    private String input_db_name;
    //输入设置_表名称
    private String input_table_name;

    //输入设置_文件位置
    private String input_file_position;

    //输入设置_数据分区
    private String input_data_partition;

    //输入设置_是否设置JDBC参数 0:不设置 1：设置
    private Integer isSetJdbcParam;

    //输入设置_JDBC连接参数
    private List<JobNodeConfJdbcParam> jobNodeConfJdbcParamList;


    //输出设置_数据源连接类型
    private Integer output_connect_type;
    //输出设置_数据源连接
    private Integer output_connect_id;
    //输出设置_数据源连接名称
    private String output_connect_name;
    //输出设置_数据库名称
    private String output_db_name;
    //输出设置_表名称
    private String output_table_name;
    //输出设置_写入模式
    private String output_write_model;
    //输出设置_数据分区
    private List<Map<String,String>> output_data_partitions;
    //输出设置_前置语句
    private String output_pre_statment;
    //输出设置_后置语句
    private String output_fix_statment;
    //数据库表名
    private String database_tablename;

    //高级设置_文件数
    private String hight_file_num;
    //高级设置_并发数(期望最大并发数)
    private String hightMaxConcurrent;

    //Ftp文件位置
    private String ftpFileLocation;
    //sap的输出设置_表名称  可以为空
    private List<Map<String,Object>> sap_output_table_name;
    //sap或者ftp数据源配置信息
    private SapConnectField sapConnectFieldInfo;

    /***
     * SQL计算
     */
    private String sql_statment;

    /***
     * 本次任务的输出表ids
     */
    private List<List<Object>> jobOut;

    /***
     * 优先级配置  高、中、低
     */
    private String priorityConfig;


    /***
     * 系统参数
     */
    private Map<Integer,Map<String,Object>> sysParamMap;
    private List<JSONObject> nodeParam;

    /***
     * 超时时间 单位分钟
     */
    private Integer outHours;
    /***
     * 是否设置超时 0：不设置  1：设置
     */
    private Integer isOpenOutHours;

    /***
     * 程序执行
     */
    //程序主类
    private String base_proc_main_class;
    //输入路径
    private String base_proc_main_in;
    //输出路径
    private String base_proc_main_out;
    //程序参数
    private String base_proc_main_args;
    //程序文件地址
    private String base_proc_main_file;

    //spark.driver.memory
    private String  resource_dm;
    //spark.driver.cores
    private String resource_dc;
    //spark.executor.memory
    private String  resource_em;
    //spark.executor.cores
    private String  resource_ec;

    //ftp数据源接入的时候,是否逐行解析
    private Integer nonStandardFormat;

    //是否开启循环取数
    private Integer isOpenLoodAccess;

    //循环取数条数
    private Integer batchSize;

    //循环 取数起始标志
    private String beginGDA;
    //循环取数结束标志
    private String endGDA;
    //循环取数停止标志
    private String stopSign;
    //循环取数停止标志的值
    private String stopSignVal;

    /**
     * 配置的任务类型，0：节点的配置  1：菜单目录对应的配置（全局配置）
     */
    private Integer jobType;

    private Integer procId;

    private JobNodeInfo jobNodeInfo;

    private List<JobNodeLayConfigDto> jobNodeLayConfigDtos;

    //是否开启分页数(0:不开启,1开启)
    private Integer startPageCount;
    //当前页码
    private Integer pageNum;
    //当前页码记录数
    private Integer pageSize;
    //结束标识
    private String endName;
    //是否开启自增
    private Integer enableIncresement;
    //输出的同步任务存储引擎
    private Integer output_storage_engine_type;
    //查询引擎
    private Integer query_engine;


    /******算法开发前端交互字段-start*********/
    //模型类型;
    private String modelTypeId;
    //模型类型名称;
    private String modelTypeName;
    //算法类型;
    private Integer algorithmTypeId;
    //算法类型的名字;
    private String algorithmTypeName;
    //模型id;
    private Integer modelId;
    //模型name;
    private String  modelName;
    //预测输入数据库名称;
    private String inputPreDbName;
    //预测输入数据库id;
    private Integer inputPreDbId;
    //预测输入表的名称;
    private String inputPreTableName;
    //预测输入表id
    private Integer inputPreTableId;
    //预测输出数据库名称;
    private String outputPreDbName;
    //预测输出数据库id;
    private Integer outputPreDbId;
    //预测输出表的名称;
    private String outputPreTableName;
    //预测输出表id
    private Integer outputPreTableId;
    //预测结果字段映射;
    private List<Map<String,Object>> preResultInfos;

    /******es的数据源数据同步-start*********/
    private String esSqlCondition;//es的检索条件
    private String esIndex;//索引
    private String esIndexType;//索引类型
    private Long esPageSize;//分页大小
    private Long esPageTime;//单位s

    /******webservice支持raw-start*********/
    private Integer reqType;//1.xml 2.json
    private String webserviceText;//xml请求数据
    private Integer resType;//1.xml 2.json
    private String anaTableNameUrl;//xml解析表的路径，按照.的路径
    private Integer olderRequestType;// 1.GET   2.POST-urlencoded  3.POST-raw

    //配置方式:cronType (1:手动配置 2：crontab表达式)
    //crontab表达式：cronUrl
    private Integer cronType;
    private String cronUrl;

    //FTP文件格式
    private String ftpFileType;
    //FTP文件名匹配方式 1：普通匹配  2：正则匹配  3：日期动态参数配置
    private Integer ftpFileMatchType;
    //FTP文件名
    private String ftpFileName;

}
